#include <head.h>

int main(int argc, char const *argv[])
{
    if(argc != 2)
    {
        printf("格式错误:[%s] [port]\n" , argv[0]);
        exit(1);
    }

    // 1、创建用户数据报 套接字  SOCK_DGRAM
    int sock_fd = socket(AF_INET , SOCK_DGRAM , 0);
    if (-1 == sock_fd)
    {
        ERRLOG("套接字创建错误");
        return 0;
    }
    
    // 2、填充服务器网络信息结构体
    // 填写信息结构体
        // 使用的是 IPV4 网络信息结构体  不用使用通用信息结构体
    struct sockaddr_in server_addr;
        // 清空结构体
    memset(&server_addr , 0 , sizeof(server_addr));
        // 确定协议 选择 IPV4
    server_addr.sin_family = AF_INET;
        // 端口号
    server_addr.sin_port = htons(atoi(argv[1]));  // 端口号可以随意指定
        // IP地址
    server_addr.sin_addr.s_addr = inet_addr("192.168.20.112");
    
        // 信息结构体长度
    socklen_t server_addr_len = sizeof(server_addr);

    // 4、收发数据
    // 缓冲区
    char buf[1024];
    memset(buf , 0 , sizeof(buf) );


    while (1)
    {
        // 用户输入
        printf("输入:");
        scanf("%s" , buf);

        // 发送信息 
        sendto( sock_fd , buf , strlen(buf) , 0 ,  (struct sockaddr *)&server_addr , server_addr_len);

        // 清空
        memset(buf , 0 , sizeof(buf) );


        // 等待接收
        recvfrom( sock_fd , buf , sizeof(buf) , 0 ,  (struct sockaddr *)&server_addr , &server_addr_len);
        
        // 打印接收信息
        printf("接收:%s\n" , buf);
        
        // 清空
        memset(buf , 0 , sizeof(buf) );
    }
    


    // 5、关闭套接字
    close(sock_fd);
    return 0;
}